package com.xiaoda.dao;

import com.xiaoda.entity.Like;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface LikeDao {

    /**
     * 查询所有喜欢
     *
     * @return 喜欢列表
     */
    List<Like> findAll();

    /**
     * 根据用户 id 查询喜欢
     *
     * @param fromUid 用户 id
     * @param toUid   喜欢用户 id
     * @return 喜欢对象
     */
    Like findByUid(@Param("fromUid") String fromUid, @Param("toUid") String toUid);

    /**
     * 添加喜欢
     *
     * @param like 喜欢对象
     * @return 受影响行数
     */
    int addLike(Like like);

    /**
     * 删除喜欢
     *
     * @param fromUid 用户 id
     * @param toUid   喜欢用户 id
     * @return 受影响行数
     */
    int delLikeByUid(@Param("fromUid") String fromUid, @Param("toUid") String toUid);

    /**
     * 查询喜欢文章
     *
     * @param fromUid 用户 id
     * @param toAid   文章 id
     * @return 喜欢对象
     */
    Like isArticleLiked(@Param("fromUid") String fromUid, @Param("toAid") int toAid);

    /**
     * 添加喜欢文章
     *
     * @param fromUid 用户 id
     * @param toAid   文章 id
     * @return 受影响行数
     */
    int addLikeArticle(@Param("fromUid") String fromUid, @Param("toAid") int toAid);

    /**
     * 删除喜欢文章
     *
     * @param fromUid 用户 id
     * @param toAid   文章 id
     * @return 受影响行数
     */
    int delLikeArticle(@Param("fromUid") String fromUid, @Param("toAid") int toAid);

    /**
     * 查询关注
     *
     * @param fromUid 用户 id
     * @param start   开始
     * @param end     结束
     * @return 关注列表
     */
    List<Like> findAllConcern(@Param("fromUid") String fromUid, @Param("start") int start, @Param("end") int end);

    /**
     * 查询被关注
     *
     * @param toUid 用户 id
     * @param start 开始
     * @param end   结束
     * @return 被关注列表
     */
    List<Like> findAllConcerned(@Param("toUid") String toUid, @Param("start") int start, @Param("end") int end);

    /**
     * 查询喜欢文章
     *
     * @param fromUid 用户 id
     * @param start   开始
     * @param end     结束
     * @return 喜欢文章列表
     */
    List<Like> findConcernArticle(@Param("fromUid") String fromUid, @Param("start") int start, @Param("end") int end);

    /**
     * 查询所有 喜欢 || 被喜欢 的数据
     *
     * @param account 用户 id
     * @param start   开始
     * @param end     结束
     * @return 喜欢列表
     */
    List<Like> findAllFollowed(@Param("account") String account, @Param("start") int start, @Param("end") int end);

    /**
     * 查询喜欢文章数
     *
     * @param account 用户 id
     * @return 喜欢文章数
     */
    int countLikeNum(String account);

    /**
     * 删除喜欢
     *
     * @param uid 用户 id
     * @return 受影响行数
     */
    int deleteByUid(String uid);

    /**
     * 删除喜欢
     *
     * @param aid 文章 id
     * @return 受影响行数
     */
    int deleteByAid(int aid);

}
